#ifndef HTTP_AGENT_COM_H
#define HTTP_AGENT_COM_H

#include <iostream>
#include <string>

using namespace std;


//==============================用户设置=======================================
//  根证书设置
typedef struct T_CerSet 
{
    std::string vinFile;                    // VIN码文件绝对路径，设置为国内A区环境时为必填
    std::string tuidFile;                   // tuid文件绝对路径
    std::string clientCer;                  // 客户端证书文件绝对路径
    std::string clientKey;                  // 客户端私钥文件绝对路径
    std::string clientKeyBuff;              // 客户端私钥，Buff形式输入，优先使用，设置空时clientKey生效

    std::string factoryRootCaCer;           // 出厂根证书-带绝对路径格式
    std::string userRootCaCer;              // 云端获取的根证书-带绝对路径格式。优先使用。无效时使用出厂根证书。
} T_CerSet;
// 云平台环境设置
enum E_CloudCaplatform
{
    CLOUD_CHINA_PROD,       // 国内生产
    CLOUD_CHINA_PRED,       // 国内预生产
    CLOUD_THALD_PROD,       // 泰国生产
    CLOUD_THALD_PRED,       // 泰国预生产
    CLOUD_MEXICO,           // 墨西哥
    CLOUD_EUROPE,           // 欧洲
    CLOUD_MOSCOW,           // 莫斯科
    CLOUD_CHINA_TSP_PROD,   // 国内A区生产
    CLOUD_CHINA_TSP_PRED,   // 国内A区预生产
};
//==============================用户设置=======================================



//==============================HTTP请求=======================================
// HTTP请求响应结果
enum E_httpReqRlt
{
    HTTP_ERR_SUCCESS = 0,   // 请求成功
    HTTP_ERR_INIT = 1,      // 请求初始状态
    HTTP_ERR_CERLOSS = 2,   // 证书缺失
    HTTP_ERR_DOMAIN = 3,    // 获取子系统域名失败
    HTTP_ERR_TOCKEN = 4,    // 获取tocken失败
    HTTP_ERR_CURLFILD = 5,  // curl请求失败
};

//==============================HTTP请求=======================================



//==============================curl文件上传========================================
// curl文件任务状态类型
enum E_FileReqRlt
{
    FILE_ERR_SUCCESS = 0,           // 请求成功
    FILE_ERR_TASKINIT = 1,          // 任务初始状态
    FILE_ERR_FILE_NOTEXIST = 2,     // 无效文件-文件不存在
    FILE_ERR_FILE_EMPTY = 3,        // 无效文件-空文件
    FILE_ERR_FILE_OVERSIZE = 4,     // 无效文件-文件过大
    FILE_ERR_CERTLOSS = 5,          // 证书缺失
    FILE_ERR_LINK_GET = 6,          // 获取上传链接失败
    FILE_ERR_LINK_PARSE = 7,        // 上传链接解析失败
    FILE_ERR_CURLRES = 8,           // curl请求失败
    FILE_ERR_RLTACK = 9,            // 上传结果反馈失败
    FILE_ERR_DEFINEMAX,

};
//==============================curl文件上传========================================



//==============================S3文件上传========================================
// S3文件任务状态类型
typedef enum E_S3FileRlt
{
    S3_FILE_ERR_SUCCESS = 0,            // 请求成功
    S3_FILE_ERR_TASKINIT,               // 任务初始化失败
    S3_FILE_ERR_SDK_NOTINIT,            // SDK未初始化
    S3_FILE_ERR_FILE_NOTEXIST,          // 上传文件不存在
    S3_FILE_ERR_FILE_EMPTY,             // 上传文件为空
    S3_FILE_ERR_FILE_OVERSIZE,          // 上传文件超size
    S3_FILE_ERR_PARAM_MISS,             // 必填参数缺失
    S3_FILE_ERR_CERTLOSS,               // 环境问题-证书缺失
    S3_FILE_ERR_LINK_GET,               // 获取上传链接失败
    S3_FILE_ERR_LINK_PARSE,             // 上传链接解析失败
    S3_FILE_ERR_S3_CLIENT_INIT,         // S3客户端初始化
    S3_FILE_ERR_SIMPLE_REQ,             // S3文件普通上传失败
    S3_FILE_ERR_CUT_REQ_CREATE,         // S3文件分片任务创建失败
    S3_FILE_ERR_CUT_FILE_READ,          // S3文件分片读取失败
    S3_FILE_ERR_CUT_SEND,               // S3文件分片单片上传失败
    S3_FILE_ERR_CUT_RESULT,             // S3文件分片结果上报失败
    S3_FILE_ERR_RLTACK,                 // S3上传确认失败
    S3_FILE_ERR_TOKEN,                  // S3的tocken凭证过期
    S3_FILE_ERR_STS_UPDATE,             // S3的tocken凭证更新
    S3_FILE_ERR_ENCRYPT_UNKNOWNTYPE,    // 未知的加密方式
    S3_FILE_ERR_ENCRYPT_WORDIR_NOSET,   // 未设置SDK临时工作目录
    S3_FILE_ERR_ENCRYPT_ERROR,          // 加密流程失败
    S3_FILE_ERR_DEFINEMAX,              // 无定义

} E_S3FileRlt;
//==============================S3文件上传========================================



#endif